#!/usr/bin/env python3
"""
字体解码常量定义

用于消除魔鬼数字，提高代码可维护性和可读性。
符合openUBMC社区的开发规范。
"""

# 字符编码范围常量
class UnicodeRanges:
    """Unicode字符范围定义"""
    CJK_UNIFIED_IDEOGRAPHS_START = 0x4E00  # 中日韩统一表意文字开始
    CJK_UNIFIED_IDEOGRAPHS_END = 0x9FFF    # 中日韩统一表意文字结束

    BASIC_LATIN_START = 0x0000              # 基本拉丁字母开始
    BASIC_LATIN_END = 0x007F                # 基本拉丁字母结束

    DIGITS_START = 0x0030                   # 数字0开始
    DIGITS_END = 0x0039                     # 数字9结束

# HTTP请求常量
class HttpConstants:
    """HTTP请求相关常量"""
    DEFAULT_TIMEOUT = 30                    # 默认请求超时时间（秒）
    MAX_RETRIES = 3                         # 最大重试次数
    RETRY_DELAY = 1                         # 重试延迟时间（秒）

# 字体文件处理常量
class FontConstants:
    """字体文件处理常量"""
    DEFAULT_CACHE_DIR = "font_cache"        # 默认缓存目录
    MAX_FONT_FILE_SIZE = 10 * 1024 * 1024   # 最大字体文件大小（10MB）
    FONT_EXTENSIONS = ['.woff', '.woff2', '.ttf', '.otf', '.eot']  # 支持的字体文件扩展名

    # 字体文件MIME类型
    FONT_MIME_TYPES = [
        'font/woff',
        'font/woff2',
        'application/font-woff',
        'application/font-woff2',
        'font/truetype',
        'font/opentype'
    ]

# 文本分析常量
class TextAnalysisConstants:
    """文本分析相关常量"""
    UNKNOWN_CHAR_THRESHOLD = 0.3           # 未知字符阈值（30%）
    MIN_TEXT_LENGTH = 1                    # 最小文本长度
    MAX_TEXT_LENGTH = 10000                # 最大文本长度

    # OCR置信度阈值
    OCR_CONFIDENCE_THRESHOLD = 0.5         # OCR识别置信度阈值
    OCR_MIN_TEXT_RATIO = 0.5               # OCR文本与原文本最小比例

# 正则表达式模式常量
class RegexPatterns:
    """正则表达式模式常量"""
    # 字体文件URL匹配模式
    FONT_FACE_PATTERN = r'@font-face\s*\{[^}]*src:\s*url\(["\']?([^"\')\s]+)["\']?\)[^}]*\}'
    FONT_LINK_PATTERN = r'<link[^>]*href=["\']([^"\']*\.(?:woff|woff2|ttf|otf|eot))["\'][^>]*>'

    # Unicode模式匹配
    UNI_PATTERN = r'uni([0-9A-F]{4,6})'
    UNICODE_HEX_PATTERN = r'u([0-9A-F]{4,6})'

    # Glyph名称模式
    GLYPH_NAME_PATTERN = r'^[a-zA-Z0-9_.]+$'

# 日志级别常量
class LogLevels:
    """日志级别常量"""
    DEBUG = 10
    INFO = 20
    WARNING = 30
    ERROR = 40
    CRITICAL = 50

# 浏览器相关常量
class BrowserConstants:
    """浏览器相关常量"""
    DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'
    PAGE_LOAD_TIMEOUT = 30                  # 页面加载超时时间（秒）
    ELEMENT_WAIT_TIMEOUT = 10               # 元素等待超时时间（秒）
    SCREENSHOT_QUALITY = 90                 # 截图质量（1-100）

# OCR相关常量
class OCRConstants:
    """OCR识别相关常量"""
    SUPPORTED_LANGUAGES = ['ch_sim', 'en']  # 支持的语言
    DEFAULT_CONFIDENCE = 0.5                # 默认置信度
    MIN_TEXT_HEIGHT = 10                    # 最小文本高度（像素）
    MAX_TEXT_HEIGHT = 100                   # 最大文本高度（像素）

# 错误代码常量
class ErrorCodes:
    """错误代码常量"""
    SUCCESS = 0                             # 成功
    FONT_DOWNLOAD_FAILED = 1001            # 字体下载失败
    FONT_PARSE_FAILED = 1002               # 字体解析失败
    OCR_INIT_FAILED = 1003                 # OCR初始化失败
    OCR_RECOGNITION_FAILED = 1004          # OCR识别失败
    BROWSER_ERROR = 1005                   # 浏览器错误
    NETWORK_ERROR = 1006                   # 网络错误
    FILE_IO_ERROR = 1007                   # 文件IO错误

# 性能监控常量
class PerformanceConstants:
    """性能监控常量"""
    MAX_EXECUTION_TIME = 60                 # 最大执行时间（秒）
    MEMORY_LIMIT_MB = 512                   # 内存限制（MB）
    MAX_CONCURRENT_TASKS = 5                # 最大并发任务数

    # 缓存相关
    CACHE_EXPIRY_HOURS = 24                 # 缓存过期时间（小时）
    MAX_CACHE_SIZE_MB = 100                 # 最大缓存大小（MB）

# 字体系统常量
class SystemFonts:
    """系统字体常量"""
    FALLBACK_FONTS = [
        'Arial',
        'Helvetica',
        'Microsoft YaHei',
        'SimSun',
        'SimHei',
        'KaiTi',
        'FangSong',
        'STSong',
        'sans-serif'
    ]

    # 字体优先级
    FONT_PRIORITY = {
        'chinese': ['Microsoft YaHei', 'SimSun', 'SimHei'],
        'english': ['Arial', 'Helvetica', 'sans-serif'],
        'fallback': ['sans-serif']
    }

# 文件操作常量
class FileConstants:
    """文件操作常量"""
    DEFAULT_ENCODING = 'utf-8'             # 默认文件编码
    MAX_FILE_SIZE_MB = 50                  # 最大文件大小（MB）
    TEMP_DIR_PREFIX = 'font_decoder_'      # 临时目录前缀

    # 文件权限
    DEFAULT_FILE_MODE = 0o644              # 默认文件权限
    DEFAULT_DIR_MODE = 0o755               # 默认目录权限

# 调试相关常量
class DebugConstants:
    """调试相关常量"""
    ENABLE_DEBUG = True                     # 是否启用调试
    DEBUG_OUTPUT_DIR = 'debug_output'       # 调试输出目录
    SAVE_INTERMEDIATE_FILES = False         # 是否保存中间文件
    LOG_PERFORMANCE_METRICS = True          # 是否记录性能指标
